/*
状态表示：f[i]表示长度为i的字符串的优秀字符串的数量
状态计算：f[i]=f[i-1]+f[i-k]
分析：
枚举优秀字符串的最后一个字符，
为0时，优秀字符串的数量取决于前i-1个字符，即f[i-1]
为1时，其最后必须要有连续的k个1，优秀字符串的数量取决于前i-k个字符，即f[i-k]

*/
#include <bits/stdc++.h>
using namespace std;
int const M = 1e9 + 7;
int t, k, l, r;
int f[100001];//f[i]表示长度为i的字符串的优秀字符串的数量
int main()
{
	cin >> t >> k;
	for (int i = 0; i <= 100000; i++)
	{
		if (i < k)//当i小于k时，f[i]初始化为1，因为数列的前k-1项为1
			f[i] = 1;
		else
			f[i] = (f[i - 1] + f[i - k]) % M;
	}
	for (int i = 1; i <= 100000; i++)
		f[i] = (f[i] + f[i - 1]) % M;
	while (t--)
	{
		cin >> l >> r;
		cout << (f[r] - f[l - 1] + M) % M << endl;
	}

	return 0;
}